package com.enation.app.javashop.core.trade.cart.service.cartbuilder.impl;

import com.enation.app.javashop.core.member.model.dos.MemberCoupon;
import com.enation.app.javashop.core.member.model.dto.MemberCouponQueryParam;
import com.enation.app.javashop.core.member.service.MemberCouponManager;
import com.enation.app.javashop.core.trade.cart.model.vo.CartVO;
import com.enation.app.javashop.core.trade.cart.model.vo.CouponVO;
import com.enation.app.javashop.core.trade.cart.service.CartPromotionManager;
import com.enation.app.javashop.core.trade.cart.service.cartbuilder.CartCouponRenderer;
import com.enation.app.javashop.framework.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 购物车优惠卷渲染实现
 *
 * @author kingapex
 * @version 1.0
 * @since 7.0.0
 * 2018/12/18
 */
@Service
public class CartCouponRendererImpl implements CartCouponRenderer {

    @Autowired
    private MemberCouponManager memberCouponManager;

    @Autowired
    private CartPromotionManager cartPromotionManager;

    @Override
    public void render(List<CartVO> cartList) {
        List<Integer> sellerList = new ArrayList<>();

        cartList.forEach(cartVO -> {
            sellerList.add(cartVO.getSellerId());
        });
        Integer[] sellerIds = new Integer[sellerList.size()];

        MemberCouponQueryParam param = new MemberCouponQueryParam();
        param.setSellerIds(sellerList.toArray(sellerIds));
        param.setStatus(1);

        //查询出这些店铺的所有优惠卷
        List<MemberCoupon> couponList = (List<MemberCoupon>) this.memberCouponManager.listByCheckout(param);

        //填充购物车的优惠卷列表
        cartList.forEach(cartVO -> {
            fillOneCartCoupon(cartVO, couponList);
        });

    }


    /**
     * 填充一个购物车的优惠劵
     *
     * @param cartVo
     * @param couponList
     */
    private void fillOneCartCoupon(CartVO cartVo, List<MemberCoupon> couponList) {


        //要形成的购物车优惠卷列表
        List<CouponVO> cartCouponList = new ArrayList<>();

        //查找可能存在的优惠劵
        CouponVO selectedCoupon = cartPromotionManager.getSelectedPromotion().getCouponMap().get(cartVo.getSellerId());


        //当前时间，判断是否在有效期使用
        long nowTime = DateUtil.getDateline();

        int sellerId = cartVo.getSellerId();
        for (MemberCoupon memberCoupon : couponList) {

            //匹配到此店铺的优惠卷
            if (sellerId == memberCoupon.getSellerId()) {

                CouponVO couponVO = new CouponVO();
                couponVO.setCouponId(memberCoupon.getCouponId());
                couponVO.setAmount(memberCoupon.getCouponPrice());
                couponVO.setUseTerm("满" + memberCoupon.getCouponThresholdPrice() + "可用");
                couponVO.setSellerId(sellerId);
                couponVO.setMemberCouponId(memberCoupon.getMcId());
                couponVO.setEndTime(memberCoupon.getEndTime());
                couponVO.setCouponThresholdPrice(memberCoupon.getCouponThresholdPrice());

                //满足条件：槛价格大于大于等于优惠券使用金额条件 当前时间大于等于生效时间 && 当前时间小于等于失效时间
                if (cartVo.getPrice().getOriginalPrice().doubleValue() >= memberCoupon.getCouponThresholdPrice().doubleValue()
                        && memberCoupon.getStartTime() <= nowTime
                        && memberCoupon.getEndTime() >= nowTime) {
                    couponVO.setEnable(1);
                } else {
                    couponVO.setEnable(0);
                }

                //如果购物车存在优惠劵
                if (selectedCoupon != null && selectedCoupon.getMemberCouponId().intValue() == couponVO.getMemberCouponId().intValue()) {
                    couponVO.setSelected(1);
                } else {
                    couponVO.setSelected(0);
                }

                cartCouponList.add(couponVO);
            }

        }

        cartVo.setCouponList(cartCouponList);

    }


}
